{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!hugo list all > stats.csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('stats.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "#import frontmatter\n",
    "#import io\n",
    "import yaml\n",
    "\n",
    "from collections import defaultdict\n",
    "\n",
    "authors = defaultdict(list)\n",
    "\n",
    "for _, row in df.iterrows():\n",
    "    #print(row.path, row.title, row.draft)\n",
    "    with open(row.path, 'r') as f:\n",
    "        try:\n",
    "            for doc in yaml.safe_load_all(f):\n",
    "                #print(doc)\n",
    "                if 'authors' in doc:\n",
    "                    for author in doc['authors']:\n",
    "                        authors[author].append((row.path, row.title, row.draft))\n",
    "        except:\n",
    "            pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Сергей Слотин:\n",
      "+ Бинарное возведение в степень (content/russian/cs/algebra/binpow.md)\n",
      "+ Матрицы (content/russian/cs/algebra/matrix.md)\n",
      "+ Задачи на умножение матриц (content/russian/cs/algebra/matmul.md)\n",
      "+ Сжатие координат (content/russian/cs/sequences/compression.md)\n",
      "+ Пути в ациклических графах (content/russian/cs/shortest-paths/acyclic-paths.md)\n",
      "+ Структуры с откатами (content/russian/cs/persistent/persistent-array.md)\n",
      "+ Применения выпуклых оболочек (content/russian/cs/convex-hulls/hull-applications.md)\n",
      "+ Битовое представление чисел (content/russian/cs/arithmetic/bit-representation.md)\n",
      "+ Декартово дерево (content/russian/cs/tree-structures/treap.md)\n",
      "+ Префиксное дерево (content/russian/cs/string-structures/trie.md)\n",
      "+ Динамика по подотрезкам (content/russian/cs/general-dynamic/segments.md)\n",
      "+ Запросы на деревьях (content/russian/cs/trees/tree-queries.md)\n",
      "+ Лемма Бержа (content/russian/cs/matching/berge.md)\n",
      "+ Метод Ньютона (content/russian/cs/numerical/newton.md)\n",
      "+ Полиномиальное хеширование (content/russian/cs/hashing/polynomial.md)\n",
      "+ Префикс-функция (content/russian/cs/string-searching/prefix-function.md)\n",
      "+ Сканирующая прямая (content/russian/cs/decomposition/scanline.md)\n",
      "+ Дерево Фенвика (content/russian/cs/range-queries/fenwick.md)\n",
      "+ Z-функция (content/russian/cs/string-searching/z-function.md)\n",
      "+ Алгоритм Ахо-Корасик (content/russian/cs/string-structures/aho-corasick.md)\n",
      "+ Алгоритм Куна (content/russian/cs/matching/kuhn.md)\n",
      "+ Коллизии хешей (content/russian/cs/hashing/collision.md)\n",
      "+ Линейные уравнения (content/russian/cs/algebra/gauss.md)\n",
      "+ Откатывание состояний (content/russian/cs/decomposition/rollback.md)\n",
      "+ Многочлены (content/russian/cs/algebra/polynomials.md)\n",
      "+ Метод копирования пути (content/russian/cs/persistent/path-copying.md)\n",
      "+ Стресс-тестирование (content/russian/cs/programming/stress-test.md)\n",
      "+ Алгоритм Манакера (content/russian/cs/string-searching/manacher.md)\n",
      "+ Дерево палиндромов (content/russian/cs/string-structures/palindromic-tree.md)\n",
      "+ Динамический массив (content/russian/cs/basic-structures/vector.md)\n",
      "+ Задачи на паросочетания (content/russian/cs/matching/matching-problems.md)\n",
      "+ Корневые эвристики (content/russian/cs/decomposition/sqrt-heuristics.md)\n",
      "+ Разреженная таблица (content/russian/cs/range-queries/sparse-table.md)\n",
      "+ Решето Эратосфена (content/russian/cs/factorization/eratosthenes.md)\n",
      "+ Связь задачи LCA и static RMQ (content/russian/cs/trees/lca-rmq.md)\n",
      "+ Персистентное дерево отрезков (content/russian/cs/persistent/persistent-segtree.md)\n",
      "+ Проверки на изоморфизм (content/russian/cs/hashing/isomorphism.md)\n",
      "+ Алгоритм Мо (content/russian/cs/decomposition/mo.md)\n",
      "+ Ленивая динамика (content/russian/cs/general-dynamic/memoization.md)\n",
      "+ Нахождение цикла (content/russian/cs/graph-traversals/cycle.md)\n",
      "+ Персистентное декартово дерево (content/russian/cs/persistent/persistent-treap.md)\n",
      "+ Meet-in-the-middle (content/russian/cs/decomposition/mitm.md)\n",
      "+ Алгоритм Карацубы (content/russian/cs/algebra/karatsuba.md)\n",
      "+ Метод двоичных подъемов (content/russian/cs/trees/binary-lifting.md)\n",
      "+ Число инверсий (content/russian/cs/sequences/inversions.md)\n",
      "+ Эйлеров цикл (content/russian/cs/graph-traversals/euler-cycle.md)\n",
      "+ Быстрое преобразование Фурье (content/russian/cs/algebra/fft.md)\n",
      "+ Корневые структуры (content/russian/cs/range-queries/sqrt-structures.md)\n",
      "+ Ро-алгоритм Полларда (content/russian/cs/factorization/pollard.md)\n",
      "+ Центроидная декомпозиция (content/russian/cs/trees/centroid.md)\n",
      "+ Heavy-light декомпозиция (content/russian/cs/trees/heavy-light.md)\n",
      "+ Двоичная куча (content/russian/cs/basic-structures/heap.md)\n",
      "+ 2-SAT (content/russian/cs/graph-traversals/2-sat.md)\n",
      "+ Цифровая сортировка (content/russian/cs/sorting/radix.md)\n",
      "+ Суффиксный массив (content/russian/cs/string-structures/suffix-array.md)\n",
      "+ Векторизация (content/russian/cs/arithmetic/simd.md)\n",
      "+ Матроиды (content/russian/cs/combinatorial-optimization/matroid.md)\n",
      "+ Просто интересные задачи (content/russian/cs/programming/bayans.md)\n",
      "+ Как добавлять и редактировать статьи (content/russian/contributing.md)\n",
      "+ Динамическая связность (content/russian/cs/spanning-trees/dcp.md)\n",
      "+ Битсет и битовое сжатие (content/russian/cs/set-structures/bitset.md)\n",
      "+ Поток минимальной стоимости (content/russian/cs/flows/mincost-maxflow.md)\n",
      "+ Система непересекающихся множеств (content/russian/cs/set-structures/dsu.md)\n",
      "- Ликбез по C++ (content/russian/cs/programming/cpp.md)\n",
      "- Вещественные числа (content/russian/cs/arithmetic/floating-point.md)\n",
      "- Динамика по подпоследовательностям (content/russian/cs/general-dynamic/sequences.md)\n",
      "- Стек (content/russian/cs/basic-structures/stack.md)\n",
      "- Необходимое число сравнений для сортировки (content/russian/cs/sorting/lower-bound.md)\n",
      "- Выпуклые функции (content/russian/cs/interactive/convex-functions.md)\n",
      "Максим Иванов:\n",
      "+ Бинарное возведение в степень (content/russian/cs/algebra/binpow.md)\n",
      "+ Матрицы (content/russian/cs/algebra/matrix.md)\n",
      "+ Задачи на умножение матриц (content/russian/cs/algebra/matmul.md)\n",
      "+ Алгоритм Дейкстры (content/russian/cs/shortest-paths/dijkstra.md)\n",
      "+ Задачи на паросочетания (content/russian/cs/matching/matching-problems.md)\n",
      "+ Перебор подмасок фиксированной маски (content/russian/cs/dynamic-subsets/submasks.md)\n",
      "+ Игра «Ним» (content/russian/cs/games/nim.md)\n",
      "+ 2-SAT (content/russian/cs/graph-traversals/2-sat.md)\n",
      "+ Биномиальные коэффициенты (content/russian/math/combinatorics/binomial.ru.md)\n",
      "+ Вычисление факториала по модулю (content/russian/math/combinatorics/factorials/factorial-modulo.ru.md)\n",
      "+ Дерево Штерна-Броко (content/russian/math/number-theory/stern-brocot.ru.md)\n",
      "+ Китайская теорема об остатках (content/russian/math/number-theory/chinese-remainder-theorem.ru.md)\n",
      "+ Код Грея (content/russian/math/combinatorics/gray-code.ru.md)\n",
      "+ Лемма Бернсайда (content/russian/math/combinatorics/bernside.ru.md)\n",
      "+ Нахождение степени делителя факториала (content/russian/math/combinatorics/factorials/factorial-divisors.ru.md)\n",
      "+ Принцип включений-исключений (content/russian/math/combinatorics/inclustion-exclusion.ru.md)\n",
      "+ Функция Эйлера (content/russian/math/number-theory/euler.md)\n",
      "+ Числа Каталана (content/russian/math/combinatorics/catalan.ru.md)\n",
      "+ Числа Фибоначчи (content/russian/math/number-theory/fibonacci.ru.md)\n",
      "- Тернарный поиск (content/russian/cs/interactive/ternary-search.md)\n",
      "- Динамика по подпоследовательностям (content/russian/cs/general-dynamic/sequences.md)\n",
      "- Правильные скобочные последовательности (content/russian/cs/combinatorial-objects/bracket-sequences.md)\n",
      "- Алгоритм Форда-Беллмана (content/russian/cs/shortest-paths/ford-bellman.md)\n",
      "- Длинная арифметика (content/russian/cs/arithmetic/big-integer.md)\n",
      "- Тестирование на простоту (content/russian/cs/factorization/primality-testing.md)\n",
      "- Нахождение отрицательного цикла (content/russian/cs/shortest-paths/negative-cycle.md)\n",
      "- Теория Шпрага-Гранди (content/russian/cs/games/sprague-grundy.md)\n",
      "- Код Прюфера (content/russian/cs/combinatorial-objects/prufer.md)\n",
      "- Алгоритм Тарьяна (content/russian/cs/trees/tarjan.md)\n",
      "- Алгоритм Диница (content/russian/cs/flows/dinic.md)\n",
      "- Алгоритм Форда-Фалкерсона (content/russian/cs/flows/ford-fulkerson.md)\n",
      "- Дискретное извлечение корня (content/russian/cs/modular/discrete-root.md)\n",
      "- Дискретное логарифмирование (content/russian/cs/modular/discrete-log.md)\n",
      "- Матричная теорема Кирхгофа (content/russian/cs/spanning-trees/kirchoff.md)\n",
      "- Модификация стека и очереди для нахождения минимума (content/russian/cs/basic-structures/stack-minima.md)\n",
      "- Онлайн поиск мостов (content/russian/cs/spanning-trees/bridges-online.md)\n",
      "- Первообразные корни (content/russian/cs/modular/primitive-root.md)\n",
      "- Поиск подотрезка массива с максимальной суммой (content/russian/cs/sequences/max-avg-segment.md)\n",
      "Андрей Гаркавый:\n",
      "+ Жадные алгоритмы (content/russian/cs/combinatorial-optimization/greedy.md)\n",
      "+ Динамика по подотрезкам (content/russian/cs/general-dynamic/segments.md)\n",
      "- Стек (content/russian/cs/basic-structures/stack.md)\n",
      "Константин Амеличев:\n",
      "+ Применения выпуклых оболочек (content/russian/cs/convex-hulls/hull-applications.md)\n",
      "+ Стресс-тестирование (content/russian/cs/programming/stress-test.md)\n",
      "+ Суффиксный массив (content/russian/cs/string-structures/suffix-array.md)\n",
      "- Disjoint Sparse Table (content/russian/cs/range-queries/disjoint-sparse-table.md)\n",
      "Глеб Лобанов:\n",
      "+ Префиксное дерево (content/russian/cs/string-structures/trie.md)\n",
      "+ Хранение графов (content/russian/cs/graph-traversals/storing-graphs.md)\n",
      "- Динамика по подпоследовательностям (content/russian/cs/general-dynamic/sequences.md)\n",
      "Даниил Николенко:\n",
      "- Ликбез по C++ (content/russian/cs/programming/cpp.md)\n",
      "[Егор Горбачев](https://www.youtube.com/watch?v=5iW84xlL0j0):\n",
      "+ Префиксные суммы (content/russian/cs/range-queries/prefix-sum.md)\n",
      "Александр Гришутин:\n",
      "+ Поиск в ширину (content/russian/cs/shortest-paths/bfs.md)\n",
      "+ Проверки на изоморфизм (content/russian/cs/hashing/isomorphism.md)\n",
      "- Хеш-таблица (content/russian/cs/set-structures/hash-table.md)\n",
      "Станислав Алексеев:\n",
      "+ Поиск в ширину (content/russian/cs/shortest-paths/bfs.md)\n",
      "[Максим Иванов](https://e-maxx.ru/algo/bfs):\n",
      "+ Поиск в ширину (content/russian/cs/shortest-paths/bfs.md)\n",
      "Александр Кульков:\n",
      "+ Быстрое преобразование Фурье (content/russian/cs/algebra/fft.md)\n",
      "+ Heavy-light декомпозиция (content/russian/cs/trees/heavy-light.md)\n",
      "- Суффиксный автомат (content/russian/cs/string-structures/automaton.md)\n",
      "Иван Сафонов:\n",
      "+ Корневые эвристики (content/russian/cs/decomposition/sqrt-heuristics.md)\n",
      "+ Корневые структуры (content/russian/cs/range-queries/sqrt-structures.md)\n",
      "- Оптимизация операций по модулю (content/russian/cs/modular/modulo-optimization.md)\n",
      "Григорий Горюнов:\n",
      "- Реализация операций «снизу» (content/russian/cs/segment-tree/bottom-up.md)\n",
      "[Александр Бачериков](https://codeforces.com/blog/entry/18051):\n",
      "- Реализация операций «снизу» (content/russian/cs/segment-tree/bottom-up.md)\n",
      "Полина Романченко:\n",
      "+ Ленивая динамика (content/russian/cs/general-dynamic/memoization.md)\n",
      "Максим Деб Натх:\n",
      "- Тандемные повторы (content/russian/cs/string-searching/tandem-repeats.md)\n",
      "Денис Акилов:\n",
      "+ Сортировка кучей (content/russian/cs/sorting/heapsort.md)\n",
      "+ Двоичная куча (content/russian/cs/basic-structures/heap.md)\n",
      "Филипп Грибов:\n",
      "- Дерево доминаторов (content/russian/cs/graph-traversals/dominators.md)\n"
     ]
    }
   ],
   "source": [
    "for author, articles in authors.items():\n",
    "    print(f'{author}:')\n",
    "\n",
    "    for path, name, _ in filter(lambda x: not x[2], articles):\n",
    "        print(f'+ {name} ({path})')\n",
    "\n",
    "    for path, name, _ in filter(lambda x: x[2], articles):\n",
    "        print(f'- {name} ({path})')"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a"
  },
  "kernelspec": {
   "display_name": "Python 3.8.10 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
